﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Logica.Modulos.ClasesLogica;
using Modelo.Modulos.ClasesModelado;

namespace ProyectoFinal
{
    public partial class frmAdministracionProyecto : Form
    {
        private int idUsuario;
        private int idProyecto;
        private string accion;
        private int comboProjectManagerId;
        private int comboClienteId;
        public class ComboBoxItem
        {

            public string Texto { get; set; }
            public object value { get; set; }

            public override string ToString()
            {
                return Texto;
            }
        }
            public int IdUsuario
            {
                get { return idUsuario; }
                set { idUsuario = value; }

            }

            public string Accion
            {
                get { return accion; }
                set { accion = value; }

            }
            public int IdProyecto
            {
                get { return idProyecto; }
                set { idProyecto = value; }
  
            }


        public frmAdministracionProyecto()
        {
            InitializeComponent();
        }

        private void btnDashBoard_Click(object sender, EventArgs e)
        {
            Close();

        }

        private void frmAdministracionProyecto_Load(object sender, EventArgs e)
        {
           
            if (accion == "Agregar")
            {
                CargarCombos();
            }
            else
            {
                if (accion == "Editar")
                {
                    dtpFechaInicio.Enabled = false;
                    CargarInfo();
                    CargarCombos();
                    CargarTareas("Editar");
                    CargarMiembros("Editar");
                }
                else
                {
                    txtNombreProyecto.ReadOnly = true;
                    txtDescripcion.ReadOnly = true;
                    txtPresupuesto.ReadOnly = true;
                    dtpFechaFin.Enabled = false;
                    dtpFechaInicio.Enabled = false;
                    cmbProyectManager.Enabled = false;
                    cmb_Cliente.Enabled = false;
                    cmb_Usuario.Enabled = false;
                    btnAgregar.Visible = false;
                    btnEliminar.Visible = false;
                    btnGuardar.Visible = false;
                    CargarInfo();
                    CargarCombos();
                    CargarTareas("Ver");
                    CargarMiembros("Ver");
                }
            }
          
        }


       public void CargarMiembros(string Accion_Frm)
        {

            try
            {
                if ((Accion_Frm == "Agregar") || (Accion_Frm == "Editar") || (Accion_Frm == "Ver"))
                {
                    try
                    {
                        ProyectoMod objMod = new ProyectoMod();
                        objMod.IdProyecto = idProyecto;
                        dataGridView1.Rows.Clear();
                        ProyectoLog logica = new ProyectoLog();
                        List<UsuarioMod> listaMiembro = logica.ConsultarMiembro(objMod);

                        for (int i = 0; i < listaMiembro.Count; i++)
                        {
                            dataGridView1.Rows.Add();
                            dataGridView1.Rows[i].Cells[0].Value = listaMiembro[i].IdUsuario;
                            dataGridView1.Rows[i].Cells[1].Value = listaMiembro[i].NombreCompleto;
                            dataGridView1.Rows[i].Cells[2].Value = listaMiembro[i].Puesto;

                        }

                    }
                    catch (Exception exc)
                    {

                        MessageBox.Show(exc.Message, "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                }
                else
                {
                    if (Accion_Frm == "Eliminar")
                    {
                        UsuariosLog logica = new UsuariosLog();
                        List<UsuarioMod> listaClientes = logica.ConsultarUsuarios();

                        DataGridViewSelectedRowCollection listaGrid = dataGridView1.SelectedRows;
                        for (int i = listaGrid.Count - 1; i >= 0; i--)
                        {
                            dataGridView1.Rows.RemoveAt(listaGrid[i].Index);
                        }
                    }
                }
           
            }
            catch (Exception exc)
            {

                MessageBox.Show(exc.Message, "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
            }
            
            
            
        }

       public void CargarTareas(string Accion_Frm)
       {

          
               if ((Accion_Frm == "Editar") || (Accion_Frm == "Ver"))
               {
                   try
                   {
                       TareasMod objMod = new TareasMod();
                       objMod.IdProyecto = idProyecto;
                       dataGridView1.Rows.Clear();
                       TareasLog logica = new TareasLog();
                       List<TareasMod> listaTarea = logica.ConsultarTareaIdProyecto(objMod);

                       for (int i = 0; i < listaTarea.Count; i++)
                       {
                           dataGridView2.Rows.Add();
                           dataGridView2.Rows[i].Cells[0].Value = listaTarea[i].IdTarea;
                           dataGridView2.Rows[i].Cells[1].Value = listaTarea[i].NombreTarea;
                           dataGridView2.Rows[i].Cells[2].Value = listaTarea[i].NombreCompleto;
                           dataGridView2.Rows[i].Cells[3].Value = listaTarea[i].PorcentajeAvanceTarea+" %";

                       }

                   }
                   catch (Exception exc)
                   {

                       MessageBox.Show(exc.Message, "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                   }
               }
           
       }
      

               
       
       
       public void CargarInfo()
       {

           try
           {
               ProyectoLog Logica = new ProyectoLog();
               ProyectoMod objMod = new ProyectoMod();
               objMod.IdProyecto = idProyecto;
               List<ProyectoMod> listaUsuarios = Logica.ConsultarProyectoId(objMod);

               for (int i = 0; i < listaUsuarios.Count; i++)
               {

                   txtNombreProyecto.Text = listaUsuarios[i].NombreProyecto;
                   txtDescripcion.Text = listaUsuarios[i].DescripcionProyecto;
                   dtpFechaInicio.Value = listaUsuarios[i].FechaInicio;
                   dtpFechaFin.Value = listaUsuarios[i].FechaFin;
                   txtPresupuesto.Text =Convert.ToInt32( listaUsuarios[i].Presupuesto).ToString();

                   if (accion == "Editar")
                   {
                       comboProjectManagerId = listaUsuarios[i].IdUsuario;
                       comboClienteId = listaUsuarios[i].IdCliente;

                   }

               }

           }
           catch (Exception exc)
           {

               MessageBox.Show(exc.Message, "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
           }
           
       }
        public void CargarCombos()
        {
            try
            {
                ProyectoLog logica = new ProyectoLog();
                List<UsuarioMod> listaProjectManagers = logica.ConsultarProjectManager();


                for (int i = 0; i < listaProjectManagers.Count; i++)
                {
                    ComboBoxItem item = new ComboBoxItem();

                    item.Texto = listaProjectManagers[i].NombreCompleto;
                    item.value = listaProjectManagers[i].IdUsuario;
                    cmbProyectManager.Items.Add(item);
                    if ((accion == "Editar") && (listaProjectManagers[i].IdUsuario == comboProjectManagerId))
                    {

                        cmbProyectManager.SelectedIndex = i;


                    }
                    else
                    {
                        cmbProyectManager.SelectedIndex = 0;
                    }

                }

                //

                List<ClientesMod> ListaClientes = logica.ConsultarCliente();


                for (int i = 0; i < ListaClientes.Count; i++)
                {
                    ComboBoxItem item = new ComboBoxItem();

                    item.Texto = ListaClientes[i].Nombre;
                    item.value = ListaClientes[i].IdCliente;
                    cmb_Cliente.Items.Add(item);

                    if ((accion == "Editar") && (ListaClientes[i].IdCliente == comboClienteId))
                    {

                        cmb_Cliente.SelectedIndex = i;


                    }
                    else
                    {
                        cmb_Cliente.SelectedIndex = 0;
                    }

                }
                //


                UsuariosLog logic = new UsuariosLog();
                List<UsuarioMod> listaUsuarios = logic.ConsultarUsuarios();


                for (int i = 0; i < listaUsuarios.Count; i++)
                {
                    ComboBoxItem item = new ComboBoxItem();

                    item.Texto = listaUsuarios[i].NombreCompleto;
                    item.value = listaUsuarios[i].IdUsuario;
                    cmb_Usuario.Items.Add(item);

                }
            }
            catch (Exception exc)
            {

                MessageBox.Show(exc.Message, "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
            }
            
        }

       private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (accion == "Agregar")
                {
                    try
                    {
                        ProyectoMod objMod = new ProyectoMod();
                        objMod.NombreProyecto = txtNombreProyecto.Text;
                        objMod.DescripcionProyecto = txtDescripcion.Text;
                        objMod.IdUsuario = Convert.ToInt32((cmbProyectManager.SelectedItem as ComboBoxItem).value);
                        objMod.FechaInicio = dtpFechaInicio.Value;
                        objMod.FechaFin = dtpFechaFin.Value;
                        objMod.Presupuesto = Convert.ToDecimal(txtPresupuesto.Text);
                        objMod.IdCliente = Convert.ToInt32((cmb_Cliente.SelectedItem as ComboBoxItem).value);
                        objMod.PorcentajeAvance = 0;
                        if (Validaciones() == true)
                        { ProyectoLog Logica = new ProyectoLog();

                          idProyecto = Logica.InsertarProyecto(objMod);
                          objMod.IdProyecto = idProyecto;
                          Logica.InsertarProyecto_usuario(objMod);

                          CargarMiembros("Agregar");
                        }
                        


                    }
                    catch (Exception exc)
                    {

                        MessageBox.Show(exc.Message, "Error del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    if (accion == "Editar")
                    {
                        try
                        {
                            ProyectoMod objMod = new ProyectoMod();
                            objMod.NombreProyecto = txtNombreProyecto.Text;
                            objMod.DescripcionProyecto = txtDescripcion.Text;
                            objMod.IdUsuario = Convert.ToInt32((cmbProyectManager.SelectedItem as ComboBoxItem).value);
                            //objMod.FechaInicio = dtpFechaInicio.Value;
                          
                            objMod.FechaFin = dtpFechaFin.Value;
                            objMod.Presupuesto = Convert.ToDecimal(txtPresupuesto.Text);
                            objMod.IdCliente = Convert.ToInt32((cmb_Cliente.SelectedItem as ComboBoxItem).value);
                            objMod.IdProyecto = idProyecto;
                            if (Validaciones() == true)
                            {
                                ProyectoLog Logica = new ProyectoLog();

                                Logica.ActualizarProyectos(objMod);


                                CargarMiembros("Agregar");
                            }
                           

                           

                        }
                        catch (Exception exc)
                        {

                            MessageBox.Show(exc.Message, "Error del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
           
            }
            catch (Exception exc)
            {


                MessageBox.Show(exc.Message, "Error del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        
            }
            
        }

       private void btnAgregar_Click(object sender, EventArgs e)
       {
           try
           {
               ProyectoMod objMod = new ProyectoMod();
               objMod.IdUsuario = Convert.ToInt32((cmb_Usuario.SelectedItem as ComboBoxItem).value);
               objMod.IdProyecto = idProyecto;
               ProyectoLog Logica = new ProyectoLog();


               if (objMod.IdUsuario == Logica.ConsultarMiembrobyId(objMod))
               {
                   MessageBox.Show("Ya es miembro de este proyecto", "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
               }
               else
               {
                   Logica.InsertarProyecto_usuario(objMod);
               }

               CargarMiembros("Agregar");
          

           }
           catch (Exception exc)
           {
               MessageBox.Show(exc.Message, "Error del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
           
           }

           
       }

       private void btnVer_Click(object sender, EventArgs e)
       {
           try
           {
           frmInfoUsuario usuario = new frmInfoUsuario();

           usuario.Accion = "Mostrar";
           int Idindice = dataGridView1.SelectedRows[0].Index;
           usuario.IdUsuario = Convert.ToInt32(dataGridView1[0, Idindice].Value);
           usuario.ShowDialog();

           }
           catch (Exception exc)
           {

               MessageBox.Show(exc.Message, "Error del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
             
           }
       }

       private void btnEliminar_Click(object sender, EventArgs e)
       {DialogResult result = MessageBox.Show("Desea Eliminar el registro", "Error Sistema", MessageBoxButtons.YesNo, MessageBoxIcon.Error);

       if (result == DialogResult.Yes)
       {
           try
           {

               int Idindice = dataGridView1.SelectedRows[0].Index;
               int IdeliminarUsuario = Convert.ToInt32(dataGridView1[0, Idindice].Value);


               ProyectoMod objMod = new ProyectoMod();
               objMod.IdUsuario = IdeliminarUsuario;
               objMod.IdProyecto = idProyecto;


               ProyectoLog Logica = new ProyectoLog();
               Logica.EliminarProyectoUsuariobyId(objMod);

               CargarMiembros("Eliminar");
           }
           catch (Exception exc)
           {

               MessageBox.Show(exc.Message, "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
           }
       }
       }

       private Boolean Validaciones()
       {
           DateTime fechaInicio = dtpFechaInicio.Value;
           DateTime diaHoy = DateTime.Now.Date;
           DateTime fechaFin = dtpFechaFin.Value;
           TimeSpan ts1 = fechaInicio - diaHoy;
           TimeSpan ts2 = fechaFin - fechaInicio;
           int diferenciaInicioH = ts1.Hours;
           int diferenciaFinH = ts2.Hours;
           int diferenciaInicioD = ts1.Days;
           int diferenciaFinD=ts2.Days;
           if (((diferenciaInicioH < 0) || (diferenciaInicioD < 0)) && (accion != "Editar"))
           {
               MessageBox.Show("La fecha es menor al dia de hoy", "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
               return false;
           }
           if ((diferenciaFinH < 0) || (diferenciaFinD<0)||(fechaInicio.Date==fechaFin.Date))
           {
               MessageBox.Show("La fecha es menor al o igual al inicio del proyecto", "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
               return false;
           }
           if ((txtNombreProyecto.Text == "") || (txtDescripcion.Text == "") || (txtPresupuesto.Text==""))
           {
               MessageBox.Show("Campo vacio", "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
               return false;
           }
           if (Convert.ToInt32(txtPresupuesto.Text) <= 0)
           {
               MessageBox.Show("Presupuesto invalido", "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
               return false;
           }


           return true; 
       }

       private void button1_Click(object sender, EventArgs e)
       {
           try
           {
               frmTarea tarea = new frmTarea();
               tarea.Accion = "Ver";
               int Idindice = dataGridView2.SelectedRows[0].Index;
               tarea.IdTarea = Convert.ToInt32(dataGridView2[0, Idindice].Value);
               tarea.IdUsuario = idUsuario;
               tarea.ShowDialog();
           }
           catch (Exception exc)
           {

               MessageBox.Show(exc.Message, "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
           
           }
          
       }


    
      

     

    
    }
}
